//
//  P2089.cpp
//  Algorithm
//
//  Created by 刘锦程 on 2023/9/7.
//

#include <stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int n;
int a[11]={1,1,1,1,1,1,1,1,1,1};
int outp[8955][11];
int ans;
void print(){
    for(int i=0;i<10;i++){
        printf("%d ",a[i]);
    }
    printf("\n");
}
int z=0;
void dfs(int k){
    if(k==0){
        print();
        return;
    }else{
        for(int i=9;i>=0;i--){
            if(k>0&&a[i]<=3){
                a[i]++;
                k--;
                dfs(k);
                k++;
                a[i]--;
            }
        }
    }
}
void dfs2(int k,int cur){
    if(k==0){
        ans++;
        for(int j=0;j<10;j++){
            outp[z][j]=a[j];
        }
        z++;
     //   print();
        return;
    }
    for(int i=1;i<=2;i++){
        if(a[cur]+i<=3&&k-i>=0){
            a[cur]+=i;
            dfs2(k-i,cur);
            a[cur]-=i;
        //    k+=i;
        }
       // if(cur<9)dfs2(k,cur+1);
       
        if(cur+1<=9)
            dfs2(k,cur+1);
           break;
    }
    
    return;
}
void P2089ans(){
    cin>>n;
    
    if(n<10||n>30){ cout<<0<<endl;
        return;
        
    }
    if(n==10){
        print();
        return;
    }
    if(n==30){
        for(int i=0;i<10;i++){
            cout<<3<<" ";
        }
        return;
    }
    n-=10;
    dfs2(n,0);
    cout<<ans<<endl;
    for(int i=z-1;i>=0;i--){
        for(int j=0;j<10;j++){
            printf("%d ",outp[i][j]);
        }
        printf("\n");
    }
}
//22
